import { reqCartList, reqDelateCartList, reqChangeChecked } from '@/api';

const state = {
	cartList: []
};
const mutations = {
	GETCARTLIST(state, data) {
		state.cartList = data;
	}
};
const actions = {
	// 获取添加购物车数据
	async getCartList({ commit }) {
		let res = await reqCartList();
		if (res.code == 200) {
			commit('GETCARTLIST', res.data);
		}
	},

	// 删除购物车某一个商品
	async getDeleteCart({ commit }, skuId) {
		let res = await reqDelateCartList(skuId);
		if (res.code == 200) {
			return 'ok';
		} else {
			return Promise.reject('删除失败');
		}
	},

	// 商品选中状态改变
	async updateChecked({ commit }, { skuID, isChecked }) {
		let res = await reqChangeChecked(skuID, isChecked);
		if (res.code == 200) {
			return 'ok';
		} else {
			Promise.reject('修改失败');
		}
	},

	/**
	 * 删除购物车中选中的商品
	 */
	deleteAllCheckedCart({ dispatch, getters }) {
		// context可以理解为就是小仓库
		let PromiseAll = [];
		// 循环每一项
		getters.cartList.cartInfoList.forEach(item => {
			// 如果选中了
			if (item.isChecked == 1) {
				// 派发action，删除这一项
				let res = dispatch('getDeleteCart', item.skuId);
				// 把结果push到数组中
				PromiseAll.push(res);
			}
		});
		// 只要数组中的每一个Promise都是成功，则返回成功，有一个失败，就返回失败
		return Promise.all(PromiseAll);
	},

	// 全选全不选功能
	updateAllChecked({ dispatch, getters }, isCheck) {
		let PromiseAll = [];
		// 遍历每一项
		getters.cartList.cartInfoList.forEach(item => {
			// 当数组中有和全选按钮状态不一样的
			if (item.isChecked !== isCheck) {
				// 就派发action，让这一项的状态变成和全选按钮一样
				let res = dispatch('updateChecked', { skuID: item.skuId, isChecked: isCheck });
				PromiseAll.push(res);
			}
		});
		return Promise.all(PromiseAll);
	}
};
const getters = {
	// 简化购物车数据
	cartList(state) {
		return state.cartList[0] || {};
	}
};

export default {
	state,
	mutations,
	actions,
	getters
};
